package com.shop.front.service.store;

import com.shop.front.vo.store.StoreCartVo;
import com.shop.common.enums.TrueFalseEnum;
import com.shop.domain.store.StoreCart;
import com.shop.domain.store.StoreProduct;
import com.shop.front.dao.store.StoreCartDao;
import com.shop.front.dao.store.StoreCartSQLDao;
import com.shop.front.dao.store.StoreProductAttrValueDao;
import com.shop.front.dao.store.StoreProductDao;
import com.shop.front.request.store.StoreCartAddReq;
import com.shop.front.request.store.StoreCartUpdateCartNumReq;
import com.shop.web.response.BaseResponse;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

@Service
@Slf4j
@Transactional
public class StoreCartService {

    @Autowired
    private StoreCartDao storeCartDao;
    @Autowired
    private StoreCartSQLDao storeCartSQLDao;
    @Autowired
    private StoreProductDao storeProductDao;
    @Autowired
    private StoreProductAttrValueDao storeProductAttrValueDao;

    public BaseResponse page(Long userId) {
        Page<StoreCartVo> page = storeCartSQLDao.page(userId);
        return new BaseResponse(page);
    }

    public BaseResponse del(Long id, Long userId) {
        StoreCart storeCart = storeCartDao.findSingle(id);

        if(!userId.equals(storeCart.getUid())) {    // 用户不匹配
            return BaseResponse.ILLEGAL_REQUEST;
        }

        storeCartDao.remove(id);
        return new BaseResponse();
    }

    public BaseResponse add(Long userId, StoreCartAddReq req) {
        Long productId = req.getProductId();
        Long productAttrValueId = req.getProductAttrValueId();

        // 商品信息
        StoreProduct product = storeProductDao.findSingle(productId);

        // 商品规格
        //StoreProductAttrValue storeProductAttrValue = storeProductAttrValueDao.findSingle(productAttrValueId);

        // 校验商品是否已下架
        //if(TrueFalseEnum.TRUE.getCode() != product.getIsShow()) {
        //    return BaseResponse.fail("商品非上架状态!");
        //}

        // 该商品及规格是否已存在购物车
        StoreCart storeCart = storeCartDao.findByProduct(userId, productId, productAttrValueId);
        if(null == storeCart) { // 购物车为空，则加入购物车
            storeCart = new StoreCart();
            storeCart.setUid(userId);
            storeCart.setProductId(productId);
            storeCart.setProductAttrValueId(productAttrValueId);
            storeCart.setCartNum(req.getCartNum());
            //storeCart.setPinkId(req.getStorePinkId());    // 错误赋值？先注释观察。
            storeCart.setIsNow(req.getIsNow());
            storeCart.setIsPay(0);
            if(null != req.getStorePink()) {
                storeCart.setStorePinkId(req.getStorePink().getId());
                storeCart.setPinkId(req.getStorePink().getPinkId());
            }
            storeCartDao.save(storeCart);
        } else {    // 存在购物车中
            if(TrueFalseEnum.TRUE.getCode() == req.getIsNow()) {    // 立即下单
                storeCartDao.updateCartNum(storeCart.getId(), req.getCartNum());
            } else {    // 普通增加数量或转提货
                if(null != req.getStorePink()) {    // 拼团或寄售转提货
                    storeCart.setStorePinkId(req.getStorePink().getId());
                    storeCart.setPinkId(req.getStorePink().getPinkId());
                    storeCart.setCartNum(req.getCartNum());
                    storeCartDao.save(storeCart);
                } else {    // 普通增加数量
                    storeCartDao.addCartNum(storeCart.getId(), req.getCartNum());
                }
            }
            // 更新返回结果
            storeCart = storeCartDao.findSingle(storeCart.getId());
        }

        return new BaseResponse(storeCart);
    }

    public BaseResponse updateCartNum(Long id, StoreCartUpdateCartNumReq req) {
        storeCartDao.updateCartNum(id, req.getCartNum());
        // 更新返回结果
        StoreCart storeCart = storeCartDao.findSingle(id);
        return new BaseResponse(storeCart);
    }
}
